home *** CD-ROM | disk | FTP | other *** search
/ FishMarket 1.0 / FishMarket v1.0.iso / fishies / 076-100 / disk_097 / shm / shm_palette.c < prev    next >
C/C++ Source or Header  |  1992-05-06  |  11KB  |  271 lines

  1. /************************************************************************
  2.                            Palette Requester                4th August 87
  3. ************************************************************************/
  4. #include <exec/types.h>
  5. #include <intuition/intuition.h>
  6.  
  7. #include "shm_defines"
  8.  
  9. extern struct ViewPort *WVP;
  10. extern struct TextAttr Fnt;
  11. extern USHORT col1[16],col2[16];
  12.  
  13. /************************************************************************
  14.                            Palette Definitions
  15. ************************************************************************/
  16.  
  17. #define PLX 134      /* Palette Window Size  */
  18. #define PLY 159
  19.  
  20. /************* Not really a gadget - current colour box ****************/
  21.  
  22. struct Image curbox_img = {0, 0, 47, 31, 1, NL, 0, 1, NL};
  23.  
  24. char curbox_str[4];
  25. struct IntuiText curbox_txt = {1, 0, JAM1, 12, 12, &Fnt, NL, NL};
  26.  
  27. struct Gadget curbox_gad =
  28. {NL,
  29. 80, 124, 47, 31,
  30. GADGHNONE | GADGIMAGE, RELVERIFY,
  31. BOOLGADGET | REQGADGET,
  32. (APTR)&curbox_img,
  33. NL, &curbox_txt, NL, NL,
  34. 22, NL
  35. };
  36.  
  37. /*************************** Palette Sliders ***************************/
  38.  
  39. struct IntuiText rtxt = {2,2,JAM1,-11,2,&Fnt,(UBYTE *)"R",NL};
  40. struct IntuiText gtxt = {2,2,JAM1,-11,2,&Fnt,(UBYTE *)"G",NL};
  41. struct IntuiText btxt = {2,2,JAM1,-11,2,&Fnt,(UBYTE *)"B",NL};
  42.  
  43. struct Image    r_img, g_img, b_img;
  44. struct PropInfo r_prop,g_prop,b_prop;
  45.  
  46. struct Gadget blue_gad = {
  47.    &curbox_gad, 17,109, 113,11, GADGHCOMP, GADGIMMEDIATE | RELVERIFY,
  48.    PROPGADGET | REQGADGET,(APTR)&b_img, NL,
  49.    &btxt, NL,(APTR)&b_prop, 16, NL };
  50.  
  51. struct Gadget green_gad = {
  52.    &blue_gad, 17,94, 113,11, GADGHCOMP, GADGIMMEDIATE | RELVERIFY,
  53.    PROPGADGET | REQGADGET,(APTR)&g_img, NL,
  54.    >xt, NL,(APTR)&g_prop, 17, NL };
  55.  
  56. struct Gadget red_gad = {
  57.    &green_gad, 17,79, 113,11, GADGHCOMP, GADGIMMEDIATE | RELVERIFY,
  58.    PROPGADGET | REQGADGET,(APTR)&r_img, NL,
  59.    &rtxt, NL,(APTR)&r_prop, 18, NL };
  60.  
  61. /*************************** Palette Switches **************************/
  62.  
  63. struct IntuiText pal_cancel_txt = {3,0,JAM1,13,1,&Fnt,
  64.                                     (UBYTE *)"Cancel",NL};
  65. struct IntuiText pal_def_txt = {3,0,JAM1,8,1,&Fnt,(UBYTE *)"Default",NL}; 
  66. struct IntuiText pal_ok_txt = {3,0,JAM1,26,1,&Fnt,(UBYTE *)"OK",NL};
  67.  
  68. struct Image pal_gad_img = {0,0, 70,9, 1, NL, 0, 2, NL};
  69.  
  70. struct Gadget pal_def_gad = {
  71.    &red_gad, 5,135, 70,9, GADGHBOX | GADGIMAGE, RELVERIFY,
  72.    BOOLGADGET | REQGADGET, (APTR)&pal_gad_img, NL,
  73.    &pal_def_txt, NL,NL, 19, NL };
  74. struct Gadget pal_cancel_gad = {
  75.    &pal_def_gad, 5,124, 70,9, GADGHBOX | GADGIMAGE, RELVERIFY,
  76.    BOOLGADGET | REQGADGET, (APTR)&pal_gad_img, NL,
  77.    &pal_cancel_txt, NL,NL, 20, NL };
  78. struct Gadget pal_ok_gad = {
  79.    &pal_cancel_gad, 5,146, 70,9, GADGHBOX | GADGIMAGE,
  80.    RELVERIFY | ENDGADGET, BOOLGADGET | REQGADGET, (APTR)&pal_gad_img, NL,
  81.    &pal_ok_txt, NL,NL, 21, NL };
  82.  
  83. /************************ Palette Colour Select ************************/
  84.  
  85. struct Image m3C[16] = {
  86.    {0,0,30,14,1, NL ,0,0,NL },
  87.    {0,0,30,14,1, NL ,0,1,NL },
  88.    {0,0,30,14,1, NL ,0,2,NL },
  89.    {0,0,30,14,1, NL ,0,3,NL },
  90.    {0,0,30,14,1, NL ,0,4,NL },
  91.    {0,0,30,14,1, NL ,0,5,NL },
  92.    {0,0,30,14,1, NL ,0,6,NL },
  93.    {0,0,30,14,1, NL ,0,7,NL },
  94.    {0,0,30,14,1, NL ,0,8,NL },
  95.    {0,0,30,14,1, NL ,0,9,NL },
  96.    {0,0,30,14,1, NL ,0,10,NL },
  97.    {0,0,30,14,1, NL ,0,11,NL },
  98.    {0,0,30,14,1, NL ,0,12,NL },
  99.    {0,0,30,14,1, NL ,0,13,NL },
  100.    {0,0,30,14,1, NL ,0,14,NL },
  101.    {0,0,30,14,1, NL ,0,15,NL } };
  102.  
  103. struct Gadget palg[16] = {
  104.    { &palg[1], 4, 15,  30,14, GADGHBOX | GADGIMAGE, RELVERIFY,
  105.       BOOLGADGET | REQGADGET,  (APTR)&m3C[0], NL,NL,NL,NL, 0, NL},
  106.    { &palg[2], 36,15, 30,14, GADGHBOX | GADGIMAGE, RELVERIFY,
  107.       BOOLGADGET | REQGADGET,  (APTR)&m3C[1], NL,NL,NL,NL, 1, NL},
  108.    { &palg[3], 68,15, 30,14, GADGHBOX | GADGIMAGE, RELVERIFY,
  109.       BOOLGADGET | REQGADGET,  (APTR)&m3C[2], NL,NL,NL,NL, 2, NL},
  110.    { &palg[4], 100,15, 30,14, GADGHBOX | GADGIMAGE, RELVERIFY,
  111.       BOOLGADGET | REQGADGET,  (APTR)&m3C[3], NL,NL,NL,NL, 3, NL},
  112.    { &palg[5], 4,30, 30,14, GADGHBOX | GADGIMAGE, RELVERIFY,
  113.       BOOLGADGET | REQGADGET,  (APTR)&m3C[4], NL,NL,NL,NL, 4, NL},
  114.    { &palg[6], 36,30, 30,14, GADGHBOX | GADGIMAGE, RELVERIFY,
  115.       BOOLGADGET | REQGADGET,  (APTR)&m3C[5], NL,NL,NL,NL, 5, NL},
  116.    { &palg[7], 68,30, 30,14, GADGHBOX | GADGIMAGE, RELVERIFY,
  117.       BOOLGADGET | REQGADGET,  (APTR)&m3C[6], NL,NL,NL,NL, 6, NL},
  118.    { &palg[8],100,30,  30,14, GADGHBOX | GADGIMAGE, RELVERIFY,
  119.       BOOLGADGET | REQGADGET,  (APTR)&m3C[7], NL,NL,NL,NL, 7, NL},
  120.    { &palg[9], 4,45, 30,14, GADGHBOX | GADGIMAGE, RELVERIFY,
  121.       BOOLGADGET | REQGADGET,  (APTR)&m3C[8], NL,NL,NL,NL, 8, NL},
  122.    { &palg[10],36,45, 30,14, GADGHBOX | GADGIMAGE, RELVERIFY,
  123.       BOOLGADGET | REQGADGET,  (APTR)&m3C[9], NL,NL,NL,NL, 9, NL},
  124.    { &palg[11],68,45, 30,14, GADGHBOX | GADGIMAGE, RELVERIFY,
  125.       BOOLGADGET | REQGADGET,  (APTR)&m3C[10], NL,NL,NL,NL, 10, NL},
  126.    { &palg[12],100,45, 30,14, GADGHBOX | GADGIMAGE, RELVERIFY,
  127.       BOOLGADGET | REQGADGET,  (APTR)&m3C[11], NL,NL,NL,NL, 11, NL},
  128.    { &palg[13],4,60, 30,14, GADGHBOX | GADGIMAGE, RELVERIFY,
  129.       BOOLGADGET | REQGADGET,  (APTR)&m3C[12], NL,NL,NL,NL, 12, NL},
  130.    { &palg[14],36,60, 30,14, GADGHBOX | GADGIMAGE, RELVERIFY,
  131.       BOOLGADGET | REQGADGET,  (APTR)&m3C[13], NL,NL,NL,NL, 13, NL},
  132.    { &palg[15],68,60, 30,14, GADGHBOX | GADGIMAGE, RELVERIFY,
  133.       BOOLGADGET | REQGADGET,  (APTR)&m3C[14], NL,NL,NL,NL, 14, NL},
  134.    { &pal_ok_gad, 100,60, 30,14, GADGHBOX | GADGIMAGE, RELVERIFY,
  135.       BOOLGADGET | REQGADGET,  (APTR)&m3C[15], NL,NL,NL,NL, 15, NL} };
  136.  
  137. struct IntuiText mstxt={2,2,JAM1,10,3,&Fnt,(UBYTE *)"Palette Control",NL};
  138.  
  139. struct Requester palette_req;
  140.  
  141. SHORT pal_border_coords[] = {0,0, PLX-1,0, PLX-1,PLY-1, 0,PLY-1, 0,0};
  142.  
  143. struct Border pal_border =
  144. {
  145. 0,0,
  146. 1,0,JAM1,
  147. 5,&pal_border_coords[0],
  148. NL
  149. };
  150.  
  151. /************************************************************************
  152.                            Palette Function
  153. ************************************************************************/
  154. palette(cW)
  155. struct Window *cW;
  156. {
  157.  
  158. FAST struct IntuiMessage *message;
  159.  
  160. FAST int class,cursel,i,item;
  161. BOOL loop,change;
  162. USHORT backup[16],temp_col;
  163.  
  164. for (i=0; i<16; i++) backup[i]=col1[i];
  165.  
  166. r_prop.Flags = g_prop.Flags = b_prop.Flags = FREEHORIZ | AUTOKNOB;
  167. r_prop.HorizBody = g_prop.HorizBody = b_prop.HorizBody = 0x1000;
  168.  
  169. ModifyIDCMP(cW, GADGETUP | GADGETDOWN | REQCLEAR | MOUSEMOVE );
  170.  
  171. InitRequester(&palette_req);
  172. palette_req.LeftEdge = 250;
  173. palette_req.TopEdge = 25;
  174. palette_req.Width = PLX;
  175. palette_req.Height = PLY;
  176. palette_req.ReqGadget = &palg[0];
  177. palette_req.ReqText = &mstxt;
  178. palette_req.BackFill = 0;
  179. palette_req.ReqBorder = &pal_border;
  180. Request(&palette_req,cW);
  181.  
  182. cursel = 1;
  183.  
  184. r_prop.HorizPot = (col1[cursel] & 0xf00) << 4;
  185. g_prop.HorizPot = (col1[cursel] & 0x0f0) << 8;
  186. b_prop.HorizPot = col1[cursel] << 12;
  187. curbox_img.PlaneOnOff = (UBYTE) cursel;
  188. RefreshGList(&red_gad,cW,&palette_req,4);
  189.  
  190. loop = TRUE;
  191. change = FALSE;
  192.         
  193. while (loop)
  194.       {
  195.       Wait(1 << cW->UserPort->mp_SigBit); /* Be good and go to sleep till
  196.                                              Intuition sends a message */
  197.  
  198.       while (message = (struct IntuiMessage *) GetMsg(cW->UserPort))
  199.          {
  200.          class = message->Class;   /* Process all outstanding Messages */
  201.          ReplyMsg(message);
  202.  
  203.          if (class == REQCLEAR) loop = FALSE;           /* OK selected */
  204.  
  205.          if ((class == GADGETDOWN) || (class == GADGETUP))
  206.             item = ((struct Gadget *) message->IAddress)->GadgetID;
  207.          }
  208.  
  209.          /* MOUSEMOVE events are not acknowledged specifically, but by
  210.             generating a message cause the following code to update the
  211.             sliders */
  212.  
  213.       /********* item is the GadgetID of the gadget selected ***********/
  214.  
  215.       if ((item >= 0) && (item < 16) && (item != cursel)) change = TRUE;
  216.       switch (item)
  217.              {
  218.              case 16 : /* The sliders have been changed. Update curbox */
  219.              case 17 : /*      and the current palette member selected */
  220.              case 18 : temp_col = ((r_prop.HorizPot >> 4) & 0xf00)
  221.                                     + ((g_prop.HorizPot >> 8) & 0xf0)
  222.                                     + (b_prop.HorizPot >>12);
  223.                        if (col1[cursel] != temp_col)
  224.                           {
  225.                           col1[cursel] = temp_col;
  226.                           LoadRGB4(WVP,&col1,16);
  227.                           RefreshGList(&curbox_gad,cW,&palette_req,1);
  228.                           RefreshGList(&palg[cursel],cW,&palette_req,1);
  229.                           }
  230.                        break;
  231.              case 19 : /* Reset to the default palette */
  232.                        for (i = 0; i < 16; i++) col1[i] = col2[i];
  233.                        LoadRGB4(WVP,&col1,16);
  234.                        r_prop.HorizPot = (col1[cursel] & 0xf00) << 4;
  235.                        g_prop.HorizPot = (col1[cursel] & 0x0f0) << 8;
  236.                        b_prop.HorizPot = col1[cursel] << 12;
  237.                        RefreshGList(&red_gad,cW,&palette_req,3);
  238.                        item = 99;
  239.                        break;
  240.              case 20 : /* Reset to the backup palette */
  241.                        for (i = 0; i < 16; i++) col1[i] = backup[i];
  242.                        LoadRGB4(WVP,&col1,16);
  243.                        r_prop.HorizPot = (col1[cursel] & 0xf00) << 4;
  244.                        g_prop.HorizPot = (col1[cursel] & 0x0f0) << 8;
  245.                        b_prop.HorizPot = col1[cursel] << 12;
  246.                        RefreshGList(&red_gad,cW,&palette_req,3);
  247.                        item = 99;
  248.                        break;
  249.              case 22 : sprintf(curbox_str,"%03X\0",col1[cursel]);
  250.                        curbox_txt.IText = (UBYTE *)curbox_str;
  251.                        if (cursel != 0) curbox_txt.FrontPen = 0;
  252.                        else curbox_txt.FrontPen =1;
  253.                        RefreshGList(&curbox_gad,cW,&palette_req,1);
  254.                        curbox_txt.IText = NL;
  255.                        item = 99;
  256.              }
  257.       if (change)
  258.          {                          /*  A new colour has been selected */
  259.          cursel = item;             /* Reset sliders and curbox gadget */
  260.          curbox_img.PlaneOnOff = (UBYTE) cursel;
  261.          r_prop.HorizPot = (col1[cursel] & 0xf00) << 4;
  262.          g_prop.HorizPot = (col1[cursel] & 0x0f0) << 8;
  263.          b_prop.HorizPot = col1[cursel] << 12;
  264.          RefreshGList(&red_gad,cW,&palette_req,4);
  265.          change = FALSE;
  266.          }
  267.       }
  268. ModifyIDCMP(cW,MENUPICK | REQCLEAR | INTUITICKS);
  269. return(TRUE);
  270. }
  271.